如何从曲线创建向量?

时间:2019-07-03 02:06:53

标签: revit-api revit revitpythonshell pyrevit

也许我对Revit API中的“曲线”概念有误解,但我基本上是在尝试从曲线创建矢量。我当时猜想是从曲线的两个端点创建一个矢量(使用GetEndPoint类),但是看来这在Revit API中不是问题。

我需要你们的帮助!谢谢!

2 个答案:

答案 0 :(得分:1)

<?php

use Base64Url\Base64Url;
use Jose\Component\Core\AlgorithmManager;
use Jose\Component\Core\JWK;
use Jose\Component\Encryption\Algorithm\ContentEncryption\A128CBCHS256;
use Jose\Component\Encryption\Algorithm\KeyEncryption\Dir;
use Jose\Component\Encryption\Compression\CompressionMethodManager;
use Jose\Component\Encryption\Compression\Deflate;
use Jose\Component\Encryption\JWEDecrypter;
use Jose\Component\Encryption\Serializer\CompactSerializer as JweSerializer;
use Jose\Component\Signature\Algorithm\HS512;
use Jose\Component\Signature\JWSVerifier;
use Jose\Component\Signature\Serializer\CompactSerializer as JwsSerializer;

require_once 'vendor/autoload.php';

$token = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.ZXlKNmFYQWlPaUpFUlVZaUxDSmhiR2NpT2lKa2FYSWlMQ0psYm1NaU9pSkJNVEk0UTBKRExVaFRNalUySWl3aWRIbHdJam9pU2xkVUluMC4uREJXMFNUa19OSUVrMmFCVElJNHVnUS5qX3l4a1BVOHNzQ2tCUkdrdjN2RGI0QjFyVDRHWEhzRUJtTlJvTVR0d0hvMjc0NF96cHIzaW1JUk15ek1nU0RIcF9xcXFIQVVnNUNvM3JuM0FTQWUzS1VaMmFsR1B1SmIzT3UxN0hGR2t6a0RDS29CamdHdU9LVHowMlpfVWpYcm1hZXg0RDVyOUt1blNZYWxTWVBDTFU3TncyZEZVWHBwWnlrb3pQdXl6RFFadjZVMDlQaXgxa1gtLW9obUpFVUZJWlN6Vi1DQUs1RTRsSmtWU3ZrZ1gxSmVBMkVjNlY4aFJUSzFIMXRmb2t6Y09nNlJXNElWN05JNVJUQW8ycmlIVlVnLV94czZIY2JFcFZxR0hlVW5QNmF0Nl9zLTFnbGMzTTFzeHBJcmxBN3FEblhPUGt1ZjFmbnpwcEpFVmZWVTV2LWpOUDZQQ0ZnMjA2S2pjeDBYYlRVX0hWN1NyUUhyWUx2Y0gwVWlWVjljZGNOWmJ0Q2hjQjkwX2M2YXVRVmZjeEJZZjE1c2V0M2g3MzA0T0w5RmM5MG5fbXNyV3RIMnVYcGxfUEEwc29IMnJMM0xVV3YyS1E0WE5lR0V5eXpqRXBZWTU3VzJMazZreWQ2UU13RV9ndy5TenQ3WGFqbTBnSy11bk05djl5azdB.V50nzzET85j2FAMRGCLqN1sLXZ8WZrfH0G5__WL6UwvrjAZbvj9tjXAnwcIoBeyFU-zvIsjom520-p2JCNoqEg';
$signatureKey = new JWK([
    'kty' => 'oct',
    'k' => Base64Url::encode('9O22Vd7QJu3mBNhOy8vwZaSH1UPdieWAj4f9si2q-O89O22Vd7QJu3mBNhOy8vwZaSH1UPdieWAj4f9si2q-O8'),
]);
$encryptionKey = new JWK([
    'kty' => 'oct',
    'k' => '9O22Vd7QJu3mBNhOy8vwZaSH1UPdieWAj4f9si2q-O8',
]);

$jwsSerializer = new JwsSerializer();
$jws = $jwsSerializer->unserialize($token);
dump($jws);

$jwsVerifier = new JWSVerifier(new AlgorithmManager([
        new HS512()
]));
$signatureIsVerified = $jwsVerifier->verifyWithKey($jws, $signatureKey, 0);
if (!$signatureIsVerified) {
    exit('Invalid signature');
}
dump('The signature is valid');

$nestedToken = $jws->getPayload();

$jweSerializer = new JweSerializer();
$jwe = $jweSerializer->unserialize($nestedToken);
dump($jwe);

$jweDecrypter = new JWEDecrypter(
    new AlgorithmManager([new Dir()]),
    new AlgorithmManager([new A128CBCHS256()]),
    new CompressionMethodManager([new Deflate()])
);
$decryptionSuccess = $jweDecrypter->decryptUsingKey($jwe, $encryptionKey, 0);
if (!$decryptionSuccess) {
    exit('Unable to decrypt the token');
}
dump('The token has been decrypted');
dump($jwe->getPayload());

dump(json_encode($signatureKey), json_encode($encryptionKey));

答案 1 :(得分:0)

这是一回事,听起来像您使用正确的类。如果我有一个Curve(它也是一个Line和一个向量),则可以这样进行调查:

Curve.GetEndPoint(0) # start XYZ point
Curve.GetEndPoint(1) # end XYZ point
Curve.Evaluate(0.5, True) # middle XYZ point

如果我想创建一个新的Line,可以这样做:

newLine = Line.CreateBound(XYZ(0,0,0), XYZ(5,2,0))

然后可以将Line绘制为详图线(newLine的两个点共享相同的Z值,因此您需要处于平面视图中):

doc.Create.NewDetailCurve(ui.ActiveView, newLine )

根据我的经验,CurveLine可以互换-您想做什么?