Skript

EPLAN-API: Showcase 2018 Juli

Mit diesem API-Addin werden an die 1000 DXF Dateien importiert und in einer eigenen Symbolbibliothek abgespeichert.
Jedes Symbol gibt es in den jeweiligen Drehvarianten und gespiegelt.

Anhand der Seiten sieht man wie aus dem Import die einzelnen Varianten entstehen.
Fixed: Im Video ist das noch nicht ganz korrekt :^)

Von |2018-07-26T14:04:56+02:002018-07-26|EPLAN, EPLAN-API|

Avada collapse comments

Wie schon beschrieben, bin ich Fan von schlichten Internetseiten, die beim Lesen nicht mit überflüssigem Inhalt ablenken. Das Kommentieren Feld gehört da für mich dazu.
Anscheinend gibt es kein WordPress-Plugin das out-of-the-box das Kommentarfeld ein- bzw. ausklappen kann.

Somit hab ich ein Child-Theme von Avada gemacht und die comments.php  angepasst:

<?php
/**
 * Comments template.
 *
 * @package Avada
 * @subpackage Templates
 */

// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
	exit( 'Direct script access denied.' );
}

do_action( 'avada_before_comments' );

/*
 * If the current post is protected by a password and
 * the visitor has not yet entered the password we will
 * return early without loading the comments.
 */
?>

<?php if ( post_password_required() ) : ?>
	<?php return; ?>
<?php endif; ?>

<?php $title_size = ( false === avada_is_page_title_bar_enabled( get_the_ID() ) ? '2' : '3' ); ?>
<?php if ( have_comments() ) : ?>

	<div id="comments" class="comments-container">
		<?php ob_start(); ?>
		<?php comments_number( esc_html__( 'No Comments', 'Avada' ), esc_html__( 'One Comment', 'Avada' ), esc_html( _n( '% Comment', '% Comments', get_comments_number(), 'Avada' ) ) ); ?>
		<?php Avada()->template->title_template( ob_get_clean(), $title_size ); ?>

		<?php if ( function_exists( 'the_comments_navigation' ) ) : ?>
			<?php the_comments_navigation(); ?>
		<?php endif; ?>

		<ol class="comment-list commentlist">
			<?php wp_list_comments( 'callback=avada_comment' ); ?>
		</ol><!-- .comment-list -->

		<?php if ( function_exists( 'the_comments_navigation' ) ) : ?>
			<?php the_comments_navigation(); ?>
		<?php endif; ?>
	</div>

<?php endif; ?>

<?php if ( ! comments_open() && get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : ?>
	<p class="no-comments"><?php esc_html_e( 'Comments are closed.', 'Avada' ); ?></p>
<?php endif; ?>

<?php if ( comments_open() ) : ?>

</br> <!--Suplanus: Start Added collapse-->
<button data-toggle="collapse" data-target="#collapsable" class="fusion-button fusion-button-default fusion-button-default-size">Add Comment</button> 
<div id="collapsable" class="collapse">
<!--Suplanus: End Added collapse-->

	<?php
	$commenter = wp_get_current_commenter();
	$req       = get_option( 'require_name_email' );
	$aria_req  = ( $req ) ? " aria-required='true'" : '';
	$html_req  = ( $req ) ? " required='required'" : '';
	$html5     = ( 'html5' === current_theme_supports( 'html5', 'comment-form' ) ) ? 'html5' : 'xhtml';
	$consent   = empty( $commenter['comment_author_email'] ) ? '' : ' checked="checked"';

	$fields = array();

	$fields['author']  = '<div id="comment-input"><input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" placeholder="' . esc_html__( 'Name (required)', 'Avada' ) . '" size="30"' . $aria_req . $html_req . ' aria-label="' . esc_attr__( 'Name', 'Avada' ) . '"/>';
	$fields['email']   = '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" placeholder="' . esc_html__( 'Email (required)', 'Avada' ) . '" size="30" ' . $aria_req . $html_req . ' aria-label="' . esc_attr__( 'Email', 'Avada' ) . '"/>';
	$fields['url']     = '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" placeholder="' . esc_html__( 'Website', 'Avada' ) . '" size="30" aria-label="' . esc_attr__( 'URL', 'Avada' ) . '" /></div>';
	$fields['cookies'] = '<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"' . $consent . ' /><label for="wp-comment-cookies-consent">' . esc_html__( 'Save my name, email, and website in this browser for the next time I comment.', 'Avada' ) . '</label></p>';

	$comments_args = array(
		'fields'               => apply_filters( 'comment_form_default_fields', $fields ),
		'comment_field'        => '<div id="comment-textarea"><label class="screen-reader-text" for="comment">' . esc_attr__( 'Comment', 'Avada' ) . '</label><textarea name="comment" id="comment" cols="45" rows="8" aria-required="true" required="required" tabindex="0" class="textarea-comment" placeholder="' . esc_html__( 'Comment...', 'Avada' ) . '"></textarea></div>',
		'title_reply'          => esc_html__( '' ), /* Suplanus: Removed Text for removing header */
		'title_reply_to'       => esc_html__( '' ), /* Suplanus: Removed Text for removing header */
		'title_reply_before'   => '', /* Suplanus: Removed Text for removing header */
		'title_reply_after'    => '', /* Suplanus: Removed Text for removing header */
		/* translators: Opening and closing link tags. */
		'must_log_in'          => '<p class="must-log-in">' . sprintf( esc_html__( 'You must be %1$slogged in%2$s to post a comment.', 'Avada' ), '<a href="' . wp_login_url( apply_filters( 'the_permalink', get_permalink() ) ) . '">', '</a>' ) . '</p>',
		/* translators: %1$s: The username. %2$s and %3$s: Opening and closing link tags. */
		'logged_in_as'         => '<p class="logged-in-as">' . sprintf( esc_html__( 'Logged in as %1$s. %2$sLog out &raquo;%3$s', 'Avada' ), '<a href="' . admin_url( 'profile.php' ) . '">' . $user_identity . '</a>', '<a href="' . wp_logout_url( apply_filters( 'the_permalink', get_permalink() ) ) . '" title="' . esc_html__( 'Log out of this account', 'Avada' ) . '">', '</a>' ) . '</p>',
		'comment_notes_before' => '',
		'id_submit'            => 'comment-submit',
		'class_submit'         => 'fusion-button fusion-button-default fusion-button-default-size',
		'label_submit'         => esc_html__( 'Post Comment', 'Avada' ),
	);

	comment_form( $comments_args );
endif;
?>
<div>
Von |2018-07-24T08:18:55+02:002018-07-24|Allgemein|

ExportProjectMissingTranslation

Luc S. hat ein Script erstellt um fehlende Übersetzungen eines Projektes zu exportieren bzw. anzuzeigen. Vielen Dank für das Bereitstellen!

Download auf GitHub

//===================================================
// LUC S.  04-07-2018
// Script Exportiert die Fehlworteliste für die eingestellte Projektsprache
//===================================================
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;

//==========================================
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

//==========================================
public class Export_Project_Missing_Translation
{
    [DeclareAction("Export_Project_Missing_Translation")]
    //[Start]
    public void Export_Txt_Fehlworte()
    {
    //=======================================================================  
    // Dialogabfrage
        const string message = "Prüfung von fehlenden Übersetzungen durchführen?";
        const string caption = "Export Fehlworteliste";
        var result = MessageBox.Show(message, caption,
                                     MessageBoxButtons.YesNo,
                                     MessageBoxIcon.Question);

        if (result == DialogResult.No)
        {
           return;
        }
     //=======================================================================
     // aktuelles Projektpfad ermitteln	
        string sProject = Get_Project();
		//sProject = sProject.Replace("File-2", "K-ELT-01");

        if (sProject == "")
        {
            MessageBox.Show("Projekt auswählen !");
            return;
        }
        //MessageBox.Show(sProject);
        
        // Projektname ermitteln
        string strProjectname = Get_Name(sProject);

     //=======================================================================
     //eingestellte Projektsprache EPLAN ermitteln 
        string strDisplayLanguage = null;
        ActionCallingContext ACCDisplay = new ActionCallingContext();
        new CommandLineInterpreter().Execute("GetDisplayLanguage", ACCDisplay);
        ACCDisplay.GetParameter("value", ref strDisplayLanguage);
        //MessageBox.Show("Language : " + strDisplayLanguage);
			
    //=======================================================================    
  	//Fehlworteliste erzeugen :
         Eplan.EplApi.ApplicationFramework.ActionCallingContext acctranslate = new Eplan.EplApi.ApplicationFramework.ActionCallingContext();
	     Eplan.EplApi.ApplicationFramework.CommandLineInterpreter CLItranslate = new Eplan.EplApi.ApplicationFramework.CommandLineInterpreter(); 
         Eplan.EplApi.Base.Progress progress = new Eplan.EplApi.Base.Progress("SimpleProgress");
         progress.BeginPart(100, "");
         progress.SetAllowCancel(true);


         string MisTranslateFile = @"c:\TEMP\EPLAN\EPLAN_Fehlworteliste_" + strProjectname + "_" + strDisplayLanguage + ".txt";
	     acctranslate.AddParameter("TYPE", "EXPORTMISSINGTRANSLATIONS");
         acctranslate.AddParameter("LANGUAGE", strDisplayLanguage);
	     acctranslate.AddParameter("EXPORTFILE", MisTranslateFile);
	     acctranslate.AddParameter("CONVERTER", "XTrLanguageDbXml2TabConverterImpl");        

	     bool sRet = CLItranslate.Execute("translate", acctranslate);

        if (!sRet)
        {
            MessageBox.Show("Fehler bei Export fehlende Übersetzungen!");
            return;
        }

       // MessageBox.Show("Fehlende Übersetzungen exportiert in : " + MisTranslateFile);

    //=================================================================
    //Fehlworteliste lesen und Zeilenanzahl ermitteln :

        int counter = 0;
        string line;
        
           if (File.Exists(MisTranslateFile))
            { 
                using (StreamReader countReader = new StreamReader(MisTranslateFile))
                {
                    while (countReader.ReadLine() != null)
                        counter++;
                }
                // MessageBox.Show("Zeilenanzahl in " + MisTranslateFile + " : " + counter);

             if (counter > 1)

                    //=================================================================
                    //Fehlworteliste öffnen falls Zeilenanzahl > 1 :

                    {
                        // MessageBox.Show("Fehlende Übersetzungen gefunden !");       
                        // Open the txt file with missing translation
                        System.Diagnostics.Process.Start("notepad.exe", MisTranslateFile);
                    }

            }  

        progress.EndPart(true);
     return;
    }

 //=======================================================================
   public string Get_Project()
    {
	try
	    {
		    // aktuelles Projekt ermitteln
		    //==========================================
		    Eplan.EplApi.ApplicationFramework.ActionManager oMngr = new Eplan.EplApi.ApplicationFramework.ActionManager();
		    Eplan.EplApi.ApplicationFramework.Action oSelSetAction = oMngr.FindAction("selectionset");
		    string sProjektT = "";
		    if (oMngr != null)
		    {
			    Eplan.EplApi.ApplicationFramework.ActionCallingContext ctx = new Eplan.EplApi.ApplicationFramework.ActionCallingContext();
			    ctx.AddParameter("TYPE", "PROJECT");
			    bool sRet = oSelSetAction.Execute(ctx);

			    if (sRet)
			    {ctx.GetParameter("PROJECT",ref sProjektT);}
			    //MessageBox.Show("Projekt: " + sProjektT);
		    }
		    return sProjektT;
        }
	    catch
 		    {return "";}
    }

   //################################################################################################
   public string Get_Name(string sProj)
   {
       try
       {
           // Projektname ermitteln
           //==========================================
           int i = sProj.Length - 5;
           string sTemp = sProj.Substring(1, i);
           i = sTemp.LastIndexOf(@"\");
           sTemp = sTemp.Substring(i + 1);
           //MessageBox.Show("Ausgabe: " + sTemp);
           return sTemp;
       }
       catch
       { return "ERROR"; }
   }

}
Von |2018-08-17T12:30:47+02:002018-07-09|EPLAN, EPLAN-Scripts|

BackgroundWorker in der EPLAN API

… geht offiziell nicht. Steht auch so in der Dokumentation. Darum hier gleich der Vermerk: Es handelt sich um eine interne Funktionalität welche nicht supported wird.

Dennoch hat es genau mein Problem gelöst:
Ich habe eine ProgressBar welche über einen BackgroundWorker viel Arbeit macht. An paar Stellen brauche ich die EPLAN API. Hier hatte ich aber komisches Verhalten (DLLs wurden nicht gefunden, usw.).
Zurückzuführen war es darauf dass der EPLAN Thread nicht wusste wo er suchen soll.

Mit EplanMainThreadDispatcher  gibt es die Möglichkeit Code im Dispatcher und somit im Thread von EPLAN auszuführen. Hier ein Beispiel:

new EplanMainThreadDispatcher().ExecuteInMainThreadSync(o =>
{
  new CommandLineInterpreter().Execute("reports /TYPE:PROJECT");
  return null;
}, null);

Hab mir das mal bisl vereinfacht mit einer Helper-Klasse:

using Eplan.EplApi.Base.Internal;
using Action = System.Action;

namespace Suplanus.Sepla.Application
{
  public class EplanDispatcher
  {
    public static void ExecuteInMainThread(Action action)
    {
      new EplanMainThreadDispatcher().ExecuteInMainThreadSync(o =>
      {
        action.Invoke();
        return null;
      }, null);
    }
  }
}

Dann brauch ich nur noch:

EplanDispatcher.ExecuteInMainThread(() =>
  {
    new CommandLineInterpreter().Execute("reports /TYPE:PROJECT");
  }
);
Von |2018-07-19T10:53:25+02:002018-06-01|EPLAN, EPLAN-API|

EPLAN-API: Showcase 2018 April

Mit dem MacroTool ist es möglich schnell und einfach Makros zu erzeugen. Es spart viel Zeit bei der Erstellung von Bauteil-, Pro Panel-, Fenster- und Seitenmakros…
Hier mal die Funktionen / Actions im Überblick:

 

Create – Electric P8

  • Artikel anlegen / aktualisieren
  • Funktionsschablone erstellen
  • Seiten im Makroprojekt erstellen
  • Gerät im Makroprojekt einfügen
  • Makrokasten einfügen und alle notwendigen Eigenschaften füllen
  • Makro erzeugen
  • Link in Artikelverwaltung eintragen

 

Create – Pro Panel

  • Artikel anlegen / aktualisieren
  • Bauraum im Makroprojekt erstellen
  • Gerät im Bauraum einfügen
  • Makrodaten einfügen und alle notwendigen Eigenschaften füllen
  • Makro erzeugen
  • Link in Artikelverwaltung eintragen

 

CreateNeutral
Gleich zu Create mit dem Unterschied dass die Zielstruktur, in der das Makro gespeichert werden soll, angegeben wird.

 

NewVariant
Es wird ein Dialog angezeigt, zur Auswahl der Darstellungsart und Variante der neuen Makro-Variante. Es wird die nächste freie Variante der Darstellungsart automatisch ausgewählt. Nach bestätigen mit OK wird die Seite erzeugt und ein Makrokasten mit gefüllten Informationen eingefügt.

 

SelectMacro
Es wird das Makroprojekt geöffnet und an die Seite des Makros gesprungen.

 

Set
Makropfade und Eigenschaften werden an Makrokasten, Seite oder Bauraum geschrieben.

 

Es sind mehrere Videos in der Youtube Playlist:

Von |2018-07-19T10:54:38+02:002018-05-04|EPLAN, EPLAN-API|
Nach oben